<?php

class EvolutionsController extends AppController {

    var $name = 'Evolutions';
    var $uses = array('Problem', 'Person', 'Evolution', 'PeopleProblem', 'Stateproblem', 'PeopleSign', 'PeopleVademecum', 'Adjunto', 'AdjuntosTmp', 'PeopleProduct', 'InsurancesProduct', 'InsurancesUser', 'InsurancesPerson', 'PeoplePractice', 'Result', 'Turn', 'Insurance');

    function beforeFilter() {
        parent::beforeFilter();

        // Aplico el Layout segun la Vista o si es AJAX
        if ($this->RequestHandler->isAjax()) {
            $this->layout = 'ajax';
        } else {
            // Cambio la Vista por la del Rol
            $this->layout = strtolower($this->Session->read('VistaActual'));
        }
    }

    function index($id_paciente = null, $archivados = null) {
        $this->Evolution->recursive = 0;

        if (!$archivados) {
            $evolutions = $this->Evolution->find('all', array(
                'conditions' => array(
                    'Evolution.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                    'Evolution.person_id' => $id_paciente,
                    'NOT' => array('Evolution.staterecord_id' => array('2', '3'))
                ),
                'order' => array('Evolution.fecha DESC', 'Problem.name'),
                'fields' => array('Evolution.id', 'Evolution.fecha', 'Evolution.person_id', 'Problem.name', 'Evolution.description', 'Evolution.created')
                    ));
        } else { // Para mostrar tambien los registros ARCHIVADOS
            $evolutions = $this->Evolution->find('all', array(
                'conditions' => array(
                    'Evolution.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                    'Evolution.person_id' => $id_paciente,
                    'NOT' => array('Evolution.staterecord_id' => array('2'))
                ),
                'order' => array('Evolution.fecha DESC', 'Problem.name'),
                'fields' => array('Evolution.id', 'Evolution.fecha', 'Evolution.person_id', 'Problem.name', 'Evolution.description', 'Evolution.created')
                    ));
        }
        $this->set('archivados', $archivados);

        $this->set('evolutions', $evolutions);
        $this->set('id_paciente', $id_paciente);
        $this->layout = 'ajax';
    }

    function add($id_paciente = null) {

        $this->_accede('evoluciona_problemas');

        if (!empty($this->data)) {

            // Si no se selecciono ningun Problema
            if (empty($this->data['Evolution']['arregloProblemasSeleccionados'])) {
                $this->Session->setFlash(__('Debe seleccionar al menos un Problema', true), 'default', array('class' => 'error-message'));
                $this->redirect('/people/view/' . $this->data['Evolution']['person_id'] . '/3');
                exit;
            }


            // Defino la Fecha para todas las Evoluciones
            $fecha_evolucion = date("Y-m-d H:i:s");


            // Cargo todos los problemas asociados
            foreach ($this->data['Evolution']['arregloProblemasSeleccionados'] AS $id_problema_seleccionada) {


                // Si el Problema seleccionado no existe, lo cargo
                if ($this->requestAction('/PeopleProblems/existeProblema/' . $this->data['Evolution']['person_id'] . '/' . $id_problema_seleccionada) == "0") {

                    $this->PeopleProblem->create();

                    // Seteo datos que no vienen del Formulario
                    $this->PeopleProblem->set(array(
                        'person_id' => $this->data['Evolution']['person_id'],
                        'problem_id' => $id_problema_seleccionada,
                        'stateproblem_id' => $this->data['Evolution']['stateproblem_id'],
                        'fecha_origen' => $this->data['PeopleProblem']['fecha_origen'],
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                    ));

                    // Grabo cada Problema al Paciente
                    $this->PeopleProblem->save();
                }

                $this->Evolution->create();

                // Seteo datos que no vienen del Formulario
                $this->Evolution->set(array(
                    'fecha' => $fecha_evolucion,
                    'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                    'user_id' => $this->Auth->user('id'),
                    'problem_id' => $id_problema_seleccionada,
                ));


                // Grabo cada Evolucion
                if ($this->Evolution->save($this->data)) {
                    $this->Session->setFlash(__('La evolución ha sido cargada', true));
                } else {
                    $this->Session->setFlash(__('La evolución no ha sido cargada. Por favor, intente nuevamente.', true), 'default', array('class' => 'error-message'));
                }
            }

            $this->redirect('/people/view/' . $this->data['Evolution']['person_id'] . '/3');
            exit;

            /*
              // Si no se selecciono ningún problema de la lista y se escribio un problema nuevo
              if ($this->data['Evolution']['problem_id'] == "0" AND $this->data['Problem']['name'] <> "") {

              $this->Problem->create();

              $this->Problem->set(array(
              'name' => $this->data['Problem']['name'],
              'user_id' => $this->Auth->user('id'),
              ));
              // Grabo el nuevo Problema
              $this->Problem->save();

              // Obtengo el ID cargado
              $this->data['Evolution']['problem_id'] = $this->Problem->id;
              }

              // Asocio un Problema al Paciente automaticamente
              if(!$this->data['Evolution']['existe_problema_cargado']){

              $this->PeopleProblem->set(array(
              'person_id' => $this->data['Evolution']['person_id'],
              'problem_id' => $this->data['Evolution']['problem_id'],
              'stateproblem_id' => $this->data['Evolution']['stateproblem_id'],
              'fecha_origen' => $this->data['PeopleProblem']['fecha_origen'],
              'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
              'user_id' => $this->Auth->user('id'),
              ));
              $this->PeopleProblem->save();
              }
             */
        }

        if (!$id_paciente) {
            exit;
        }

        $people = $this->Person->find('list', array(
            'conditions' => array('Person.id' => $id_paciente),
            'fields' => array('Person.id', 'Person.full_name')
                ));


        $problemaspaciente = $this->PeopleProblem->find('all', array(
            'conditions' => array(
                'PeopleProblem.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                'PeopleProblem.person_id' => $id_paciente,
                'NOT' => array('PeopleProblem.stateproblem_id' => array('1')),
                'NOT' => array('PeopleProblem.staterecord_id' => array('2', '3'))
            ),
            'order' => array('Problem.name'),
            'fields' => array('Problem.id', 'Problem.name')
                ));

        $stateproblem = $this->Stateproblem->find('list');

        $this->set('problemaspaciente', $problemaspaciente);
        $this->set('id_paciente', $id_paciente);
        $this->set('stateproblem', $stateproblem);
        $this->set(compact('problems', 'people'));
    }

    function archivar($id = null, $id_paciente = null, $estado = null) {
        if (!$id) {
            $this->Session->setFlash(__('Evolucion no valida', true), 'default', array('class' => 'error-message'));
            $this->redirect('/dashboards');
        }

        if (!$id_paciente) {
            $this->Session->setFlash(__('Paciente no valido', true), 'default', array('class' => 'error-message'));
            $this->redirect('/dashboards');
        }

        if (!$estado) {
            $this->Session->setFlash(__('Estado no valido', true), 'default', array('class' => 'error-message'));
            $this->redirect('/dashboards');
        }

        $this->Evolution->id = $id;
        $this->Evolution->set(array(
            'staterecord_id' => $estado,
            'user_id' => $this->Auth->user('id'),
        ));

        if ($this->Evolution->save()) {
            $this->Session->setFlash(__('La Evolucion fue procesada.', true));
            $this->redirect('/people/view/' . $id_paciente . '/3');
        }
        $this->Session->setFlash(__('La Evolucion no pudo ser procesada', true), 'default', array('class' => 'error-message'));
        $this->redirect('/people/view/' . $id_paciente . '/3');
    }

    function mobile() {

        // Si existe una persona y un texto de evolucion, lo cargo
        if (!empty($this->params['form']['person_id']) AND ! empty($this->params['form']['txt_evolucion'])) {

            // Si este header falla
            header('Content-Type: text/html; charset=UTF-8');

            $fecha_evolucion = date("Y-m-d H:i:s");
            $id_problema_predeterminado = 872548016; // CONSULTA

            $this->Evolution->create();
            $this->Evolution->set(array(
                'fecha' => $fecha_evolucion,
                'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                'user_id' => $this->Auth->user('id'),
                'problem_id' => $id_problema_predeterminado,
                'description' => nl2br(utf8_encode(urldecode($this->params['form']['txt_evolucion']))),
                'person_id' => $this->params['form']['person_id'],
            ));
            $this->Evolution->save();

            echo "1|Ok";
            exit;
        } else {
            if (empty($this->params['form']['person_id'])) {
                echo "0|Paciente no asignado.";
                exit;
            }

            if (empty($this->params['form']['txt_evolucion'])) {
                echo "0|No se pudo cargar la Evolución por estar vacia.";
                exit;
            }
        }

        $this->autoRender = false;
    }

    function editEvolution($id = null) {

        if (!empty($this->params['form']['value']) AND $id) {

            $this->Evolution->id = $id;

            // Si se pudo grabar
            if ($this->Evolution->saveField('description', $this->params['form']['value'])) {
                echo $this->params['form']['value'];
            } else { // Si no pudo
                echo "No se pudo guardar el cambio...";
            }
        }

        $this->autoRender = false;
    }

    function rapida($id_paciente = null, $turno_id = 0) {
        $this->_accede('evoluciona_problemas');


        $fecha_evolucion = date("Y-m-d H:i:s");
        if (!empty($this->data) and ( !empty($this->data['Problemas']) or ! empty($this->data['Evolution']['problema_evolucion']) )) {

            //---------------------------------------------------------------
            // Existe el id del turno?
            //---------------------------------------------------------------
            if (isset($this->data['Evolution']['turno_id'])) {
                $turno_id = $this->data['Evolution']['turno_id'];
            } else {
                $turno_id = 0;
            }

            // Defino la Fecha para la Evolución
            if (isset($this->data['Evolution']['retorna']) and $this->data['Evolution']['retorna'] == 'dashboard') {
                //-----------------------------------------------------
                // le indica donde retornar, agregado para agregar el valor de la consulta desde el dashboard
                $retorno = 'dashboard';
                //pr($this->data); die();
            } else {
                $retorno = '';
            }

            // Flag que determina si al menos existe algo para cargar
            $evolucionActiva = false;
            $evolucion_grabada = false;
            //====================================================================
            // Creo la evolución si se cargo alguna descripcion
            //====================================================================

            if (!empty($this->data['Evolution']['description'])) {

                // Se predetermina el Problema a utilizar
                if (empty($this->data['Evolution']['problema_evolucion'])) {
                    $this->data['Evolution']['problema_evolucion'][] = 872548016; // CONSULTA
                }

                foreach ($this->data['Evolution']['problema_evolucion'] as $id_problema_predeterminado) {

                    $this->Evolution->create();
                    $this->Evolution->set(array(
                        'fecha' => $fecha_evolucion,
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                        'problem_id' => $id_problema_predeterminado,
                        'description' => $this->data['Evolution']['description'],
                        'person_id' => $this->data['Evolution']['person_id'],
                    ));
                    $this->Evolution->save();
                }
                $evolucion_grabada = true;
            }


            //====================================================================
            // Grabo Productos / Insurances
            //====================================================================
            if (isset($this->data['Productos']) and ( !empty($this->data['Productos']))) {

//pr($this->data['Productos']);	die();			
                foreach ($this->data['Productos'] as $clave => $valor) {

                    if ($valor['actualiza'] == 1) {
                        //--------------------------- Actualizo el valor en insurances_user
                        $sql = $InsurancesProduct = $this->InsurancesProduct->find('first', array(
                            'conditions' => array(
                                'InsurancesProduct.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                                'InsurancesProduct.user_id' => $this->Auth->user('id'),
                                'InsurancesProduct.insurance_user_id' => $valor['insurance_user_id'],
                                'InsurancesProduct.product_id' => $valor['product_id'],
                            )
                                )
                        );
                        $InsurancesProduct['InsurancesProduct']['importe'] = $valor['importe'];
                        $this->InsurancesProduct->save($InsurancesProduct['InsurancesProduct']);
                    } elseif ($valor['actualiza'] == 'crea') {
                        // Guardo los datos en la ficha del paciente
                        $InsurancePerson['id'] = 0;
                        $InsurancePerson['insurance_id'] = $valor['insurance_id'];
                        $InsurancePerson['person_id'] = $this->data['Evolution']['person_id'];
                        $InsurancePerson['nombre_plan'] = $valor['plan'];
                        $InsurancePerson['nro_afiliado'] = $valor['nro_afiliado'];
                        $this->InsurancesPerson->save($InsurancePerson);

                        // El medico tiene esa OS / Plan?
                        $financiadores = $this->InsurancesUser->find('first', array(
                            'conditions' => array(
                                'InsurancesUser.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                                'InsurancesUser.user_id' => $this->Auth->user('id'),
                                'InsurancesUser.insurance_id' => $valor['insurance_id'],
                                "InsurancesUser.plan" => $valor['plan'],
                            )
                                ));
                        if (empty($financiadores)) {
                            //-- No la tiene, se la agrego
                            $this->InsurancesUser->create();
                            $this->InsurancesUser->set(array(
                                'id' => 0,
                                'insurance_id' => $valor['insurance_id'],
                                'plan' => $valor['plan'],
                                'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                                'user_id' => $this->Auth->user('id'),
                            ));
                            $this->InsurancesUser->save();
                            $insurance_user_id = $this->InsurancesUser->getLastInsertID();

                            $this->InsurancesProduct->create();
                            $this->InsurancesProduct->set(array(
                                'id' => 0,
                                'insurance_user_id' => $insurance_user_id,
                                'product_id' => $valor['product_id'],
                                'importe' => $valor['importe'],
                                'money_id' => $valor['money_id'],
                                'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                                'user_id' => $this->Auth->user('id'),
                            ));
                            $this->InsurancesProduct->save();
                        }
                    } elseif ($valor['insurance_user_id'] == 0) {
                        // No esta la asociacion en la grilla, entonces la creo
                        $this->InsurancesUser->create();
                        $this->InsurancesUser->set(array(
                            'id' => 0,
                            'insurance_id' => $valor['insurance_id'],
                            'plan' => $valor['plan'],
                            'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                            'user_id' => $this->Auth->user('id'),
                        ));
                        $this->InsurancesUser->save();
                        $insurance_user_id = $this->InsurancesUser->getLastInsertID();

                        $this->InsurancesProduct->create();
                        $this->InsurancesProduct->set(array(
                            'id' => 0,
                            'insurance_user_id' => $insurance_user_id,
                            'product_id' => $valor['product_id'],
                            'importe' => $valor['importe'],
                            'money_id' => $valor['money_id'],
                            'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                            'user_id' => $this->Auth->user('id'),
                        ));
                        $this->InsurancesProduct->save();
                    }


                    $xOS = $this->Insurance->read(null, $valor['insurance_id']);
                    $valor['osname'] = $xOS['Insurance']['short_name'];


                    $this->PeopleProduct->create();
                    $this->PeopleProduct->set(array(
                        'id' => 0,
                        'insurance_id' => $valor['insurance_id'],
                        'product_id' => $valor['product_id'],
                        'product_name' => $valor['producto'],
                        'os_name' => $valor['osname'],
                        'plan' => $valor['plan'],
                        'importe' => $valor['importe'],
                        'money_id' => $valor['money_id'],
                        'person_id' => $this->data['Evolution']['person_id'],
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                        'staterecord_id' => '1'
                    ));
                    $this->PeopleProduct->save();

                    // Activo el Flag que determina que existe algo para cargar
                    $evolucionActiva = true;
                }
            }



            //====================================================================
            // Grabo Signos Vitales, si existen
            //====================================================================
            if (isset($this->data['SignosVitales']) and ( !empty($this->data['SignosVitales']))) {

                foreach ($this->data['SignosVitales'] as $clave => $valor) {

                    $fecha_sv = substr($valor['fecha'], 6, 4) . "-" . substr($valor['fecha'], 3, 2) . '-' . substr($valor['fecha'], 0, 2) . ' 12:00:00';


                    $this->PeopleSign->create();
                    $this->PeopleSign->set(array(
                        'fecha' => $fecha_sv,
                        'person_id' => $this->data['Evolution']['person_id'],
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                        'sign_id' => $clave,
                        'valor' => $valor['valor'],
                        'staterecord_id' => '1',
                        'created' => $fecha_evolucion
                    ));
                    $this->PeopleSign->save();

                    // Activo el Flag que determina que existe algo para cargar
                    $evolucionActiva = true;
                }

                //====================================================================
                // Carga Automatica de IMC (Indice de Masa Corporal)
                //====================================================================
                // Consulto la ultima altura del Paciente
                $arreglo_altura = $this->requestAction('/signs/ultimosigno/11/' . $this->data['Evolution']['person_id']);

                $ultima_altura = $arreglo_altura['valor']; // Expresada en cm
                // Convierto la altura en metros
                $ultima_altura = $ultima_altura * 0.01;

                // Consulto el ultimo peso del Paciente
                $arreglo_peso = $this->requestAction('/signs/ultimosigno/10/' . $this->data['Evolution']['person_id']);
                $ultimo_peso = $arreglo_peso['valor'];
                $fecha_ultimo_peso = $arreglo_peso['fecha'];

                // Actualizo el Signo Indice de Masa Corporal (Peso / Altura al cuadrado) si se cargo la Altura y el Peso
                if (!empty($ultima_altura) AND $ultima_altura != 0) {
                    $imc = ($ultimo_peso / ($ultima_altura * $ultima_altura));

                    if ($imc > 0) {

                        $this->PeopleSign->create();

                        $this->PeopleSign->set(array(
                            'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                            'user_id' => $this->Auth->user('id'),
                            'fecha' => $fecha_ultimo_peso,
                            'valor' => $imc,
                            'person_id' => $this->data['Evolution']['person_id'],
                            'sign_id' => 15,
                        ));

                        // Grabo el Signo IMC
                        $this->PeopleSign->save();
                    }
                }
                //====================================================================
            }

            //====================================================================			
            // Grabo Practicas, si existen
            //====================================================================			
            if (isset($this->data['Practicas']) and ( !empty($this->data['Practicas']))) {
                foreach ($this->data['Practicas'] as $clave => $valor) {

                    $fecha_practica = substr($valor['fecha'], 6, 4) . "-" . substr($valor['fecha'], 3, 2) . '-' . substr($valor['fecha'], 0, 2) . ' 12:00:00';

                    $this->PeoplePractice->create();
                    $this->PeoplePractice->set(array(
                        'id' => 0,
                        'person_id' => $this->data['Evolution']['person_id'],
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                        'practice_id' => $clave,
                        'staterecord_id' => 1,
                        'fecha' => $fecha_practica,
                        'comments' => $valor['comments'],
                    ));
                    $this->PeoplePractice->save();

                    // Activo el Flag que determina que existe algo para cargar
                    $evolucionActiva = true;
                }
            }


            //====================================================================			
            // Grabo Resultados, si existen
            //====================================================================			
            if (isset($this->data['Resultado']) and ( !empty($this->data['Resultado']))) {

                foreach ($this->data['Resultado'] as $clave => $valor) {

                    $fecha_resultado = substr($valor['fecha'], 6, 4) . "-" . substr($valor['fecha'], 3, 2) . '-' . substr($valor['fecha'], 0, 2) . ' 12:00:00';

                    $this->Result->create();
                    $this->Result->set(array(
                        'id' => 0,
                        'person_id' => $this->data['Evolution']['person_id'],
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                        'practice_id' => $clave,
                        'staterecord_id' => 1,
                        'fecha_solicitud' => $fecha_resultado,
                        'conclusion' => $valor['comments'],
                        'valor' => $valor['valor'],
                    ));
                    $this->Result->save();

                    // Activo el Flag que determina que existe algo para cargar
                    $evolucionActiva = true;
                }
            }


            //====================================================================			
            // Grabo Problemas, si existen
            //====================================================================			
            if (isset($this->data['Problemas']) and ( !empty($this->data['Problemas']))) {

                foreach ($this->data['Problemas'] as $clave => $valor) {


                    // Si el Problema seleccionado no existe, lo cargo
                    if ($this->requestAction('/PeopleProblems/existeProblema/' . $this->data['Evolution']['person_id'] . '/' . $clave) == "0") {

                        $fecha_problema = substr($valor['fecha'], 6, 4) . "-" . substr($valor['fecha'], 3, 2) . '-' . substr($valor['fecha'], 0, 2) . ' 12:00:00';

                        $this->PeopleProblem->create();
                        $this->PeopleProblem->set(array(
                            'fecha_origen' => $fecha_problema,
                            'person_id' => $this->data['Evolution']['person_id'],
                            'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                            'user_id' => $this->Auth->user('id'),
                            'problem_id' => $clave,
                            'stateproblem_id' => $valor['stateproblem_id'],
                            'tag_id' => $valor['tag_id'],
                            'staterecord_id' => '1',
                        ));
                        $this->PeopleProblem->save();

                        // Activo el Flag que determina que existe algo para cargar
                        $evolucionActiva = true;
                    }
                }
            }

            //====================================================================			
            // Grabo Medicamentos, si existen
            //====================================================================			
            if (isset($this->data['Medicamentos']) and ( !empty($this->data['Medicamentos']))) {
                //pr($this->data['Medicamentos']); die();				
                foreach ($this->data['Medicamentos'] as $clave => $valor) {

                    list($dia, $mes, $ano) = explode('/', $valor['fecha_inicio']);
                    $fecha_inicio = $ano . "-" . $mes . '-' . $dia;
                    $mk_inicio = mktime(10, 10, 10, $mes, $dia, $ano);

                    if ($valor['indicacion_id'] == 1) { // Limitada
                        $fecha_fin = substr($valor['fecha_fin'], 6, 4) . "-" . substr($valor['fecha_fin'], 3, 2) . '-' . substr($valor['fecha_fin'], 0, 2);
                        $dias_vto = 60 * 60 * 24 * 15;
                    } elseif ($valor['indicacion_id'] == 2) { // Crónicas
                        $fecha_fin = '2038-1-1';
                        $dias_vto = 60 * 60 * 24 * 180;
                    } else {
                        $fecha_fin = $fecha_inicio;
                        $dias_vto = 60 * 60 * 24 * 15;
                    }
                    
                    $fecha_vencimiento = date("Y-m-d", ($mk_inicio + $dias_vto));
                    
                    $this->PeopleVademecum->create();
                    $this->PeopleVademecum->set(array(
                        'fecha_inicio' => $fecha_inicio,
                        'fecha_fin' => $fecha_fin,
                        'vencimiento' => $fecha_vencimiento,
                        'person_id' => $this->data['Evolution']['person_id'],
                        'client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                        'user_id' => $this->Auth->user('id'),
                        'vademecum_id' => $clave,
                        'nombre_vademecum' => $valor['nombre_vademecum'],
                        'typeindicacionmedicamento_id' => $valor['indicacion_id'],
                        'posologia' => $valor['posologia'],
                        'staterecord_id' => '1',
                        'prescription_id' => 0,
                        'cantidad_indicada' => $valor['cantidad_indicada'],
                        'unidad_id' => $valor['unidad_id'],
                        'via_id' => $valor['via_id'],
                        'frecuencia_id' => $valor['frecuencia_id'],
                        'frecuencia' => $valor['frecuencia']
                    ));
                    $this->PeopleVademecum->save();

                    // Activo el Flag que determina que existe algo para cargar
                    $evolucionActiva = true;
                }
            }

            //====================================================================			
            // Hay adjuntos??
            //====================================================================			
            $DestinoTemporal = ROOT . DS . APP_DIR . DS . "webroot" . DS . "files" . DS . "temp";
            $DestinoFinal = ROOT . DS . APP_DIR . DS . "webroot" . DS . "uploads";

            $key_attach = $this->data['Adjuntos'];
            $adjuntos = $this->AdjuntosTmp->find('all', array('conditions' => array('AdjuntosTmp.key_attach' => $key_attach)));

            if (!empty($adjuntos)) {

                foreach ($adjuntos as $a) {

                    $archivo_origen = $DestinoTemporal . DS . $a['AdjuntosTmp']['adjunto'];
                    $archivo_final = $DestinoFinal . DS . $a['AdjuntosTmp']['adjunto'];

                    if (copy("$archivo_origen", "$archivo_final")) {
                        unlink("$archivo_origen");
                    }

                    $this->Adjunto->create();
                    $this->Adjunto->set(array(
                        'id' => 0,
                        'user_id' => $a['AdjuntosTmp']['user_id'],
                        'client_id' => $a['AdjuntosTmp']['client_id'],
                        'person_id' => $a['AdjuntosTmp']['person_id'],
                        'nombre' => $a['AdjuntosTmp']['nombre'],
                        'comentario' => $a['AdjuntosTmp']['comentario'],
                        'adjunto' => $a['AdjuntosTmp']['adjunto'],
                        'size_kb' => $a['AdjuntosTmp']['size'] / 1024,
                        'fecha' => $a['AdjuntosTmp']['fecha']
                    ));
                    $this->Adjunto->save();

                    // Borro el archivo temporal
                    $this->AdjuntosTmp->delete($a['AdjuntosTmp']['id']);

                    $evolucionActiva = true;
                }
            }

            //====================================================================			
            // Grabo la Evolucion si no esta vacia
            //====================================================================	
            if ($retorno != 'dashboard') {
                if ($evolucion_grabada == true) {


                    if ($turno_id > 0) {
                        // Turn.stateturn_id = 5 => Atendido
                        $hora_atendido = date("Y-m-d H:i:s");
                        $sql = "update turns set stateturn_id='5', hora_atendido='$hora_atendido' where id='$turno_id' ";
                        $this->Turn->query($sql);
                    }
                    $this->Session->setFlash(__('La evolución ha sido cargada', true));
                } else {
                    if ($evolucionActiva == true) {
                        if ($turno_id > 0) {
                            // Turn.stateturn_id = 5 => Atendido
                            $hora_atendido = date("Y-m-d H:i:s");
                            $sql = "update turns set (stateturn_id='5', hora_atendido='$hora_atendido') where id='$turno_id' ";
                            $this->Turn->query($sql);
                        }

                        $this->Session->setFlash(__('La evolución ha sido cargada', true));
                    } else {
                        $this->Session->setFlash(__('La evolución no puede estar vacia.', true), 'default', array('class' => 'error-message'));
                    }
                }

                //====================================================================			
                // Si es una Evolucion Rapida
                //====================================================================			
                if (isset($this->data['Evolution']['esQuick']) and $this->data['Evolution']['esQuick'] == "1") {
                    $this->redirect($this->referer());
                } else {
                    $this->redirect('/people/view/' . $this->data['Evolution']['person_id'] . '/3');
                }
            } else {
                $this->redirect('/dashboards');
            }

            exit;
        }

        if (!$id_paciente) {
            exit;
        }

        $people = $this->Person->find('list', array(
            'conditions' => array('Person.id' => $id_paciente),
            'fields' => array('Person.id', 'Person.full_name')
                ));

        $this->set('id_paciente', $id_paciente);
        $this->set('turno_id', $turno_id);
        $this->set(compact('people'));
    }

    function recetario() {

        $fecha_evolucion = date("Y-m-d H:i:s");
        if (!empty($this->data)) {

            $id_paciente = $_POST['id_paciente'];
            $datos_persona = $this->Person->read(null, $id_paciente);
            $nombre_paciente = $datos_persona['Person']['full_name'];

            $client_id = $this->Session->read('ClientesUsuarioLogueado.id');
            $user_id = $this->Auth->user('id');

            //pr($this->data); die();
            //====================================================================			
            // Grabo Medicamentos, si existen
            //====================================================================			
            if (isset($this->data['Medicamentos']) and ( !empty($this->data['Medicamentos']))) {

                //-----------------------------------------------------------------
                //                                             Creo la prescripcion
                //-----------------------------------------------------------------
                $Prescription['id'] = 0;
                $Prescription['name'] = $nombre_paciente . ' - (' . date("Y/m/d") . ')';
                $Prescription['user_id'] = $user_id;
                $Prescription['client_id'] = $client_id;
                $Prescription['person_id'] = $id_paciente;
                $Prescription['tipo_prescripcion'] = 'medicamentos';

                $this->loadModel('Prescription');
                $this->Prescription->save($Prescription);
                $prescription_id = $this->Prescription->getInsertID();

                foreach ($this->data['Medicamentos'] as $clave => $valor) {

                    list($dia, $mes, $ano) = explode('/', $valor['fecha_inicio']);
                    $fecha_inicio = $ano . "-" . $mes . '-' . $dia;
                    $mk_inicio = mktime(10, 10, 10, $mes, $dia, $ano);

                    if ($valor['indicacion_id'] == 1) { // Limitada
                        $fecha_fin = substr($valor['fecha_fin'], 6, 4) . "-" . substr($valor['fecha_fin'], 3, 2) . '-' . substr($valor['fecha_fin'], 0, 2);
                        $dias_vto = 60 * 60 * 24 * 15;
                        $fecha_vencimiento = date("Y-m-d", ($mk_inicio + $dias_vto));
                    } elseif ($valor['indicacion_id'] == 2) { // Crónicas
                        $fecha_fin = '2038-1-1';
                        $dias_vto = 60 * 60 * 24 * 180;
                        $fecha_vencimiento = date("Y-m-d", ($mk_inicio + $dias_vto));
                    } else {
                        $fecha_fin = $fecha_inicio;
                        $dias_vto = 60 * 60 * 24 * 15;
                        $fecha_vencimiento = date("Y-m-d", ($mk_inicio + $dias_vto));
                    }

                    $this->PeopleVademecum->create();
                    $this->PeopleVademecum->set(array(
                        'fecha_inicio' => $fecha_inicio,
                        'fecha_fin' => $fecha_fin,
                        'person_id' => $id_paciente,
                        'client_id' => $client_id,
                        'user_id' => $user_id,
                        'vademecum_id' => $clave,
                        'nombre_vademecum' => $valor['nombre_vademecum'],
                        'typeindicacionmedicamento_id' => $valor['indicacion_id'],
                        'vencimiento' => $fecha_vencimiento,
                        'posologia' => $valor['posologia'],
                        'staterecord_id' => '1',
                        'prescription_id' => $prescription_id,
                        'cantidad_indicada' => $valor['cantidad_indicada'],
                        'cantidad_entregar' => $valor['cantidad_entregar'],
                        'unidad_id' => $valor['unidad_id'],
                        'via_id' => $valor['via_id'],
                        'frecuencia_id' => $valor['frecuencia_id'],
                        'frecuencia' => $valor['frecuencia']
                    ));
                    $this->PeopleVademecum->save();
                }
            }
        }

        $this->redirect('/people/view/' . $id_paciente . '/3');
        die();
    }

    function indicaciones() {
        //---------------------------------------------------------------
        // Graba las indicaciones de practicas generadas desde el 
        // recetario de indicaciones
        //---------------------------------------------------------------
        $fecha_evolucion = date("Y-m-d H:i:s");
        if (!empty($this->data)) {

            $id_paciente = $_POST['id_paciente'];
            $datos_persona = $this->Person->read(null, $id_paciente);
            $nombre_paciente = $datos_persona['Person']['full_name'];

            $client_id = $this->Session->read('ClientesUsuarioLogueado.id');
            $user_id = $this->Auth->user('id');



            //pr($this->data); die();
            //====================================================================			
            // Grabo Practicas, si existen
            //====================================================================			

            if (isset($this->data['Practicas']) and ( !empty($this->data['Practicas']))) {

                //-----------------------------------------------------------------
                //                                             Creo la prescripcion
                //-----------------------------------------------------------------
                $Prescription['id'] = 0;
                $Prescription['name'] = $nombre_paciente . ' - (' . date("Y/m/d") . ')';
                $Prescription['user_id'] = $user_id;
                $Prescription['client_id'] = $client_id;
                $Prescription['person_id'] = $id_paciente;
                $Prescription['tipo_prescripcion'] = 'practicas';


                $this->loadModel('Prescription');
                $this->Prescription->save($Prescription);
                $prescription_id = $this->Prescription->getInsertID();


                foreach ($this->data['Practicas'] as $clave => $valor) {

                    list($dia, $mes, $ano) = explode('/', $valor['fecha']);
                    $fecha = $ano . "-" . $mes . '-' . $dia . ' 10:00:00';
                    //echo $fecha; die();
                    //$fecha = date("Y-m-d");	

                    $this->PeoplePractice->create();
                    $this->PeoplePractice->set(array(
                        'person_id' => $id_paciente,
                        'client_id' => $client_id,
                        'user_id' => $user_id,
                        'practice_id' => $clave,
                        'prescription_id' => $prescription_id,
                        'staterecord_id' => 1,
                        'fecha' => $fecha,
                        'comments' => $valor['comments'],
                        'ficha_id' => 0
                    ));
                    $this->PeoplePractice->save();
                }
            } //endif isset Practicas
        }

        $this->redirect('/people/view/' . $id_paciente . '/3');
        die();
    }

    function parenteral() {

        $fecha_evolucion = date("Y-m-d H:i:s");

        if ($_POST) {


            $id_paciente = $_POST['id_paciente'];
            $nombre_vademecum = $_POST['nombre_vademecum'];
            $datos_persona = $this->Person->read(null, $id_paciente);
            $nombre_paciente = $datos_persona['Person']['full_name'];

            $client_id = $this->Session->read('ClientesUsuarioLogueado.id');
            $user_id = $this->Auth->user('id');


            //====================================================================			
            // Grabo Medicamentos, si existen
            //====================================================================			
            /* pr($_POST)
              [medicamento] => test 2
              [medicamento_id] => 2
              [texto_medicamento_seleccionado] => test 2
              [volumen_id] => 1
              [cloruro_sodio] => 3
              [cloruro_potasio] => 2
              [sulfato_magnesio] => 2
              [otro] => 2
              [medio_id] => 2
              [via_id] => 6
              [observaciones] => 23
              [id_paciente] => 3
              [vademecum_parenteral] => Vademecumparental
             */

            $this->PeopleVademecum->create();
            $this->PeopleVademecum->set(array(
                'person_id' => $id_paciente,
                'client_id' => $client_id,
                'user_id' => $user_id,
                'staterecord_id' => '1',
                'vademecum_id' => $_POST['medicamento_id'],
                'via_id' => $_POST['via_id'],
                'volumen_id' => $_POST['volumen_id'],
                'cloruro_sodio' => $_POST['cloruro_sodio'],
                'cloruro_potasio' => $_POST['cloruro_potasio'],
                'sulfato_magnesio' => $_POST['sulfato_magnesio'],
                'otro' => $_POST['otro'],
                'medio_id' => $_POST['medio_id'],
                'observaciones' => $_POST['observaciones'],
                'nombre_vademecum' => $_POST['nombre_vademecum']
            ));
            $this->PeopleVademecum->save();
        }

        $this->redirect('/people/view/' . $id_paciente . '/3');
        die();
    }

    function valorconsulta($id = 0, $turno_id = 0) {

        $asocia_financiador_consulta = $this->_accede('asocia_financiador_consulta', 'retorna');
        $this->set('asocia_financiador_consulta', $asocia_financiador_consulta);

        $this->Person->recursive = 0;
        if (!$id) {
            $this->Session->setFlash(__('Invalid person', true));
            $this->redirect('/dashboards');
        }

        $datos_persona = $this->Person->read(null, $id);
        $this->set('persona', $datos_persona);
        //pr($datos_persona);
        // Obtengo las Obras Sociales del Paciente
        $options = array('conditions' => array('InsurancesPerson.person_id' => $id));
        $insurances_paciente = $this->InsurancesPerson->find('all', $options);
        $this->set('insurances_paciente', $insurances_paciente);
//		pr($insurances_paciente);
        //-------------------------------------------------------------------------------------------------------------------
        //---------------------------------------------------------------------------------- Obtengo Financiadores del medico
        //-------------------------------------------------------------------------------------------------------------------
        $id_user = $this->Session->read('Auth.User.id');
        $this->loadModel('InsurancesUser');
        $financiadores = $this->InsurancesUser->find('all', array(
            'conditions' => array(
                'InsurancesUser.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                'InsurancesUser.user_id' => $id_user,
            ),
            'order' => array('InsurancesUser.insurance_id' => 'ASC', 'InsurancesUser.plan' => 'ASC')
                ));
        $this->set('financiadores', $financiadores);
        //pr($financiadores);
        //-------------------------------------------------------------------------------------------------------------------
        //-------------------------------------------------------------------------------------- Obtengo Productos del medico
        //-------------------------------------------------------------------------------------------------------------------
        $this->loadModel('ProductsUser');
        $productos = $this->ProductsUser->find('all', array(
            'conditions' => array(
                'ProductsUser.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
                'ProductsUser.user_id' => $id_user,
            )
                ));
        $this->set('productos', $productos);
        //pr($productos);
        // Inicializo el Arreglo de OOSS
        $os = array();
        $x = 0;

        foreach ($insurances_paciente as $ip) {
            $arreglo_aux_ooss = $this->Insurance->read(null, $ip['InsurancesPerson']['insurance_id']);
            $os[$x]['ooss'] = $arreglo_aux_ooss['Insurance']['name'];
            $os[$x]['plan'] = $ip['InsurancesPerson']['nombre_plan'];
            $os[$x]['afiliado'] = $ip['InsurancesPerson']['nro_afiliado'];
            $x++;
        }
        //pr($insurances_paciente);
        $this->set('ooss_paciente', $os);
        $this->set('person', $datos_persona);
        $this->set('turno_id', $turno_id);
    }

}

?>